#define _CRT_SECURE_NO_WARNINGS 1

//#include<stdio.h>
//#include<string.h>
//
//int lengthOfLastWord(char* s) {
//    char* tmp = s;
//    char* ret = NULL;
//    int len1 = strlen(tmp);
//    int count = 0;
//    for(int i = 0; i<len1; i++)
//    {
//        if (*tmp != ' ')
//        {
//            count++;
//        }
//        else
//        {
//            if (*(s + 1) == ' ')
//            {
//                break;
//            }
//            count = 0;
//        }
//        tmp++;
//    }
//
//    return count;
//}
//
//int lengthOfLastWord1(char* s) {
//    char* tmp = s;
//    char* ret = NULL;
//    int len1 = strlen(tmp);
//    int count = 0;
//    int count1 = 0;
//    for (int i = 0; i < len1; i++)
//    {
//        if (*s != ' ' && *s != '\0')
//        {
//            count++;
//        }
//        else
//        {
//            s++;
//            count = 0;
//        }
//    }
//
//    return count;
//}
//
//int main()
//{
//    char* arr = "hello world";
//    int ret = lengthOfLastWord1(arr);
//    printf("%d\n", ret);
//
//    return 0;
//
//}

//#include<stdio.h>
//
//int* plusOne(int* digits, int digitsSize, int* returnSize) {
//    int i = 0;
//    int ret = 0;
//    int* tmp1 = digits;
//    for (int i = 0; i < digitsSize; i++)
//    {
//        ret = ret * 10 + *tmp1;
//        tmp1++;
//    }
//    ret++;
//    int count = 0;
//    int tmp = ret;
//    while (tmp)
//    {
//        count++;
//        tmp /= 10;
//    }
//    if (count > digitsSize)
//        (*returnSize)++;
//    else
//        *returnSize = digitsSize;
//    int* tmp2 = digits + digitsSize - 1;
//    for (int i = 0; i < digitsSize; i++)
//    {
//        *tmp2 = ret % 10;
//        tmp2--;
//        ret /= 10;
//    }
//    return returnSize;
//}
//
//int main()
//{
//    int arr[] = { 1,2,3 };
//    int len = 0;
//    plusOne(arr, 3, &len);
//    for (int i = 0; i < len; i++)
//    {
//        printf("%d ", arr[i]);
//    }
//
//    return 0;
//}

//#include<stdio.h>
//#include<stdlib.h>
//
//int plusOne(int* digits, int digitsSize, int* returnSize) {
//    int i = 0;
//    int ret = 0;
//    int* tmp1 = digits;
//    for (int i = 0; i < digitsSize; i++)
//    {
//        ret = ret * 10 + *tmp1;
//        tmp1++;
//    }
//    ret++;
//    int count = 0;
//    int tmp = ret;
//    while (tmp)
//    {
//        count++;
//        tmp /= 10;
//    }
//    if (count > digitsSize)
//        *returnSize = digitsSize + 1;
//    else
//        *returnSize = digitsSize;
//    int* arr = (int*)malloc((*returnSize) * sizeof(int));
//    for (int i = returnSize - 1; i >= 0; i--)
//    {
//        arr[i] = ret % 10;
//        ret /= 10;
//    }
//    return *returnSize;
//}
//
//int main()
//{
//    int arr[] = { 1,2,3 };
//    int len = 0;
//    int ret = plusOne(arr, 3, &len);
//    printf("%d", ret);
//
//    return 0;
//}

//#include<stdio.h>
//#include<string.h>
//
//int main()
//{
//	char arr[81] = { 0 };
//	char* tmp = " ";
//	char* tmp1 = strtok(arr, tmp);
//	char* least = tmp1;
//	while (tmp1 != NULL)
//	{
//		char* tmp2 = strtok(NULL, tmp);
//		if (strcmp(tmp2,tmp1) < 0)
//		{
//			least = tmp2;
//		}
//	}
//	printf("%s", least);
//
//	return 0;
//}

//#include<stdio.h>
//#include<stdlib.h>
//#include<string.h>
//
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	char** arr = (char**)malloc(n * 4);
//	for (int i = 0; i < n; i++)
//	{
//		char* tmp = (char*)malloc(81 * sizeof(char));
//		scanf("%s", tmp);
//		arr[i] = tmp;
//	}
//	char* least = arr[0];
//	int i = 0;
//	for(int i = 0; i<n-1; i++)
//	{
//		if (strcmp(least, arr[i + 1]) > 0)
//		{
//			least = arr[i + 1];
//		}
//	}
//	printf("%s", least);
//
//	return 0;
//}

//int* plusOne(int* digits, int digitsSize, int* returnSize) {
//    int* arr = (int*)malloc((digitsSize + 1) * sizeof(int));
//    int tmp = 1;
//    for (int i = digitsSize - 1; i >= 0; i--)
//    {
//        if (digits[0] + tmp == 10)
//        {
//            for (int j = 0; j < digitsSize; j++)
//            {
//                arr[j + 1] = digits[j];
//            }
//            arr[0] = 1;
//            return arr;
//        }
//        digits[i] += tmp;
//        if (digits[i] == 10)
//        {
//            digits = 0;
//        }
//        else
//        {
//            tmp = 0;
//        }
//        arr[i] = digits[i];
//    }
//
//    return arr;
//}
//
//int main()
//{
//
//}

//#include <stdio.h>
//#include <string.h>
//#include <stdlib.h>
//
//int main() {
//    int N;
//    scanf("%d", &N);
//    char str[80][80];
//    int n = 0;
//    char* min = (char*)malloc(81 * sizeof(char));
//    for (int i = 0; i < N; i++) {
//        scanf("%s", str[i]);
//        if (strcmp(str[i], min) < 0) {
//            min = str[i];
//            n = i;
//        }
//    }
//    printf("%s", str[n]);
//    return 0;
//}

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

char* addBinary(char* a, char* b) {
    int len = strlen(a) > strlen(b) ? strlen(a) : strlen(b);
    char* arr = (char*)malloc(len + 1);
    int i = strlen(a) - 1;
    int j = strlen(b) - 1;
    char tmp = 0;
    int tmp3 = len - 1;
    while (i>=0 && j>=0)
    {
        if (tmp3 == 0)
        {
            if (arr[tmp3] + tmp == '2')
            {
                arr[1] = '0';
                for (int k = len - 1; k >= 1; k--)
                {
                    arr[k + 1] = arr[k];
                }
                arr[0] = '1';
            }
            return arr;
        }
        char tmp2 = a[i] + b[j]+tmp;
        if (tmp2 == '2')
        {
            tmp = 1;
            tmp2 = '0';
        }
        else
        {
            tmp = 0;
        }
        arr[tmp3] = tmp2;
        tmp3--;
    }
    return arr;
}

int main()
{
    char* arr1 = "11";
    char* arr2 = "1";
    printf("%s", addBinary(arr1, arr2));

    return 0;
}
